package com.castle.fortress.admin.orders.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.castle.fortress.admin.member.entity.MemberEntity;
import com.castle.fortress.admin.orders.entity.SaleCouponDataEntity;
import com.castle.fortress.admin.orders.dto.SaleCouponDataDto;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.castle.fortress.admin.orders.entity.SaleCouponEntity;
import org.apache.ibatis.annotations.Param;

import java.util.HashMap;
import java.util.Map;
import java.util.List;

/**
 * 优惠券领取记录 服务类
 *
 * @author whc
 * @since 2023-01-06
 */
public interface SaleCouponDataService extends IService<SaleCouponDataEntity> {

    /**
     * 分页展示优惠券领取记录列表
     *
     * @param page
     * @param saleCouponDataDto
     * @return
     */
    IPage<SaleCouponDataDto> pageSaleCouponData(Page<SaleCouponDataDto> page, SaleCouponDataDto saleCouponDataDto);

    /**
     * 分页展示优惠券领取记录扩展列表
     *
     * @param page
     * @param saleCouponDataDto
     * @return
     */
    IPage<SaleCouponDataDto> pageSaleCouponDataExtends(Page<SaleCouponDataDto> page, SaleCouponDataDto saleCouponDataDto);

    /**
     * 优惠券领取记录扩展详情
     *
     * @param id 优惠券领取记录id
     * @return
     */
    SaleCouponDataDto getByIdExtends(Long id);

    /**
     * 展示优惠券领取记录列表
     *
     * @param saleCouponDataDto
     * @return
     */
    List<SaleCouponDataDto> listSaleCouponData(SaleCouponDataDto saleCouponDataDto);

    /**
     * 手动发送优惠券
     *
     * @param coupon
     * @param getNumber
     * @param receivers
     */
    void send(SaleCouponEntity coupon, Integer getNumber, List<MemberEntity> receivers);


    /**
     * 查询某个用户根据 所拥有的优惠券集合
     * @param memberId
     * @return
     */
    HashMap<Long, HashMap<String, Long>> countGroupByMemberId(Long memberId);
}
